/***************************************************************************
创建者：华磊
 开始时间：         : 2017.1.17
 copyright            : (C) 同川科技
 修改说明：（每次有修改就添加一条，带有 修改人，修改时间，修改描述）

 ***************************************************************************
 *   时间间隔测量类
 * 提供时间测量功能， 时间开始和时间结束函数必须成对调用，否则结果不对。
*                                                                         *
 ***************************************************************************/
#ifndef MEASURETIME_H
#define MEASURETIME_H

#include <qstring.h>
/**
 * @brief The MeasureTime class 提供时间测量功能， 时间开始和时间结束函数必须成对调用，否则结果不对。
 */
class MeasureTime
{
public:
    /**
     * @brief MeasureTime
     * @param measureComment   打印字符串
     * @param isPrint　　1＝ｐｒｉｎｔ
     * @param printInterval　＝measureCount
     * @param measureCount　调用多少次打印一次
     */
    MeasureTime(QString measureComment, int isPrint,  int printInterval, int measureCount);

    /**
     * @brief recordInTime 时间开始
     */
    void recordInTime();
    /**
      * @brief recordOutTime　时间结束
      */
     int recordOutTime();
     /**
       * @brief reset　时间测量复位
       */
      void reset();
      void recordPeirodTime();

public:
    QString measureComment;
    /**
     * @brief isPrint 是否打印结果
     */
    int isPrint ;
    /**
     * @brief printInterval 打印间隔控制
     */
    int printInterval;
    /**
     * @brief measureCount 测量次数。超过后从新计算
     */
    int measureCount;
    /**
     * @brief minTime 消耗最小时间
     */
    int minTime;
    /**
     * @brief maxTime 消耗最长时间
     */
    int maxTime;
    /**
     * @brief averageTime 消耗平均时间
     */
    double averageTime;
    /**
     * @brief addTime 消耗时间累加
     */
    double addTime;

private:
    /**
     * @brief isPeriodTimeInitialed 周期时间计数是否初始话
     */
    int isPeriodTimeInitialed;
    /**
     * @brief callCount　时间函数调用计数
     */
    int callCount;
    /**
     * @brief printCount 　打印间隔控制临时变量
     */
    int printCount;
    /**
     * @brief inTime 进入时间
     */
    struct timespec inTime;
    /**
     * @brief outTime出去时间
     */
    struct timespec outTime;


};

#endif // MEASURETIME_H

